Software applications are often designed in a modular fashion. Such designs permit individual modules to be modified independent of other modules. Modular design also permits reuse of modules for different applications. For example, an internet search engine may be implemented on a server and accessed by various devices, including a desktop web browser, handheld device, or audio browser.
The specific messages communicated to a user through a user interface may impact how user-friendly the user interface is. For example, a casual user that receives a technical message about an error in the system may become confused and think of the user interface as daunting.
Message delivery systems are often tightly coupled to the business objects to which they serve and the user interfaces to which they send messages. Often, the code for these systems is tightly integrated, requiring redesign of the message delivery system when the user interfaces and requirements of the business objects change.